

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 点对点mq
 */
public class Producer {

    /**
     * 生产者
     * @param args
     * @throws JMSException
     */
    public static void main(String[] args) throws JMSException {

        //连接mq消息中间件的账号密码，在mq消息中间件中activeMq/conf/jetty-realm.properties文件中配 置
        String userName = "admin";
        String password = "admin";
        //发送消息给中间件的端口号，在启动activemq时会启动2 个端口8161和61616，其中8161是后台管理系统，61616是给java用的tcp端口
        String brokerUrl = "tcp://127.0.0.1:61616";
        // ConnectionFactory ：连接工厂，JMS 用它创建连接
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName,
                password, brokerUrl);
        // JMS 客户端到JMS Provider 的连接
        Connection connection = connectionFactory.createConnection();
        connection.start();
        Session session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE);
        // Destination ：消息的目的地;消息发送给谁.
        // 获取session注意参数值my-queue是Query的名字
        Queue queue = session.createQueue("xd-queue");
        // MessageProducer：消息生产者
        MessageProducer producer = session.createProducer(queue);
        // 设置不持久化
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        // 发送一条消息
        for (int i = 1; i <= 5; i++) {
            sendMsg(session, producer, i);
        }
        System.out.println("消息发送成功");
        session.commit();  //设置为客户端确认时才需要提交，否则会报错
        connection.close();
    }

    /**
     * 在指定的会话上，通过指定的消息生产者发出一条消息
     *
     * @param session  消息会话
     * @param producer 消息生产者
     */
    public static void sendMsg(Session session, MessageProducer producer, int i) throws JMSException {
        // 创建一条文本消息
        TextMessage message = session.createTextMessage("Hello ActiveMQ！" + i);
        // 通过消息生产者发出消息
        producer.send(message);
    }
}
